package com.javaweb.db.mybatis.api.adapter;

import com.javaweb.db.help.SqlBuildInfo;
import com.javaweb.util.core.StringUtil;

/**
 * 与DaoWapper的接口名称对应
 * <p>
 * 所有实现本接口的类即为具体的实现类
 * @see com.javaweb.db.mybatis.api.DaoWapper<T>
 * @author tank2140896
 */
public interface SqlAdapter {

	/**
	 * 插入操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 插入的SQL语句
	 */
	String insert(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 修改操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 修改的SQL语句
	 */
	String update(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 删除操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 删除的SQL语句
	 */
	String delete(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 查询所有操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 查询所有的SQL语句
	 */
	String selectAll(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 统计所有操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 统计所有的SQL语句
	 */
	String selectAllCount(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 根据主键查询操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 根据主键查询的SQL语句
	 */
	String selectByPk(SqlBuildInfo sqlBuildInfo);

	/**
	 * 唯一查询操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 唯一查询的SQL语句
	 */
	String selectOne(SqlBuildInfo sqlBuildInfo);

	/**
	 * 多条查询操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 多条查询的SQL语句
	 */
	String selectList(SqlBuildInfo sqlBuildInfo);
	
	/**
	 * 多条统计操作
	 * @param sqlBuildInfo SqlBuildInfo
	 * @return String 多条统计的SQL语句
	 */
	String selectListCount(SqlBuildInfo sqlBuildInfo);
	
	/* ------------------------------------------------------------ 华丽的分割线 ------------------------------------------------------------ */
	
	/**
	 * SQL语句防注入过滤
	 * @param sqlCondition SQL语句
	 * @return String 过滤后的SQL语句
	 */
	default String sqlConditionFilter(String sqlCondition) {
		if(!StringUtil.isEmpty(sqlCondition)) {
			//替换单引号（'）和短杠（-）
			sqlCondition = sqlCondition.replaceAll("'|-","");
		}
		return sqlCondition;
	}
	
}